Delphi 不重覆的字串列 TStringList 試作
環境:Delphi RAD 10.4
動機:
不重覆字串對於Python是很簡單的,只須把List 丟給Set( )就能自動排序、去掉重覆者。
今天實作一個Delphi的類似功能,應用的是:
List.Sorted := True;
List.Duplicates := dupIgnore;
畫面:
程式目地: 讓comboBox1 從TXT檔載入,可在edit1新增,程式結束再存回TXT檔。
其中主要的功能包含:
TStringList.LoadFromFile
TStringList.SaveToFile
TString.Duplicates
說明:
文字檔filterHx.Txt 必需放在 Win32\Debug內 ,因為RAD10 會把EXE檔放在這裡。
全部程式碼:
unit testStringList01;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
ComboBox1: TComboBox;
function sUnique(List:TStringList; newOne: string):TStringList;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
uString : TStringList;
implementation
{$R *.dfm}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
uString.SaveToFile('filterHx.txt');
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
uString := TStringList.Create;
//--- 編碼時,此檔應放在 win32\debug內
uString.LoadFromFile('filterHx.txt');
comboBox1.Items.Assign(uString);
end;
//--- TStringList 重整 排序 不重覆
function TForm1.sUnique(List:TStringList; newOne: string):TStringList;
begin
//--- Ignore if duplicated
List.Sorted := True;
List.Duplicates := dupIgnore;
List.Add(newOne);
result := List;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
tmp : string;
i : integer;
begin
tmp := edit1.Text;
if length(tmp) <>0 then begin
sUnique(uString,tmp);
comboBox1.Items.Assign(uString);
end;
end;
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = 13 then Button1Click(nil);
end;
end.